ggplot2(12)-配色

设置对象颜色

将点设为红色

1
2
library(ggplot2)
ggplot(mtcars,aes(x=wt,y=mpg)) + geom_point(colour="red") # 将点改为红色

mark

条形图的填充与轮廓色

用红色填充(fill=“red”),轮廓为黑色(colour=“black”)’

1
2
library(MASS)
ggplot(birthwt,aes(x=bwt)) + geom_histogram(fill="red",colour="black")

mark

将变量映射到颜色上

下面的代码是将Cultivar变量映射到图形属性fill上。

1
2
3
4
5
6
library(gcookbook)
## Warning: package 'gcookbook' was built under R version 3.4.4
ggplot(cabbage_exp,aes(x=Date,y=Weight,fill=Cultivar))+
geom_bar(stat="identity",colour="black",position="dodge")

mark

下面的代码与上述代码相同:

1
2
ggplot(cabbage_exp,aes(x=Date,y=Weight)) +
geom_bar(stat="identity",aes(fill=Cultivar),colour="black",position="dodge")

mark

将cyl映射到颜色属性上,如下所示:

1
ggplot(mtcars,aes(x=wt,y=mpg,colour=cyl)) + geom_point()

mark

下面的代码等同于上述代码:

1
ggplot(mtcars,aes(x=wt,y=mpg)) + geom_point(aes(colour=cyl))

mark

注:mtcars数据集中的cyl是连续型变量,因此图例中的颜色是渐变的,如果是因子型变量,则颜色是离散的,如下所示:

1
2
3
mtcars1 <- mtcars
mtcars1$cyl <- factor(mtcars1$cyl) # 将cyl变量转化为因子型变量
ggplot(mtcars1,aes(x=wt,y=mpg)) + geom_point(aes(colour=cyl))

mark

对离散型变量使用不同的调节板

基础绘图

1
2
3
4
5
6
library(gcookbook)
p <- ggplot(uspopage,aes(x=Year,y=Thousands,fill=AgeGroup)) + geom_area()
p
# 或等同于
# p + scale_fill_discrete()
# p + scale_fill_hue()

mark

调节颜色深度

基础绘图

1
2

mark

加深颜色

1
2
h + scale_colour_hue(l=45)
# l表示亮度,越高颜色越浅

mark

调色板

可以用RColorBrewer来进行颜色设置,如下所示:

橘黄色颜色

1
p + scale_fill_brewer(palette="Oranges")

mark

灰色颜色

1
p + scale_fill_grey()

mark

上述代码的绘图区域与图例不匹配,现在进行反转:

1
p + scale_fill_grey(start=0.7,end=0)

mark

使用颜色名称调色

scale_colour_manual()可以对颜色进行精确地设置,可以用颜色的名称,也可以用RGB值,下面是用颜色的名称来表示:

1
2
3
library(gcookbook)
h <- ggplot(heightweight,aes(x=ageYear,y=heightIn,colour=sex)) + geom_point()
h + scale_colour_manual(values=c("red","blue"))

mark

用颜色的RGB值调色

1
h + scale_colour_manual(values=c("#CC6666","#7777DD"))

mark

直接用变量来设置颜色

可以直接指定m的颜色是蓝色(blue),f的颜色是红色(red)

1
h + scale_colour_manual(values=c(m="blue",f="red"))

mark

使用色盲友好式的调色板

1
2
3
4
library(gcookbook)
p <- ggplot(uspopage,aes(x=Year,y=Thousands,fill=AgeGroup)) + geom_area()
cb_palette <- c("#999999","#E69F00","#56B4E9","#009E73","#E0E442","#0072B2","#D55E00","#CC79A7")
p + scale_fill_manual(values=cb_palette)

mark

对连续型变量使用自定义调色板

基础绘图

1
2
3
4
library(gcookbook)
p <- ggplot(heightweight,aes(x=ageYear,y=heightIn,colour=weightLb)) +
geom_point(size=3)
p

mark

使用两种颜色的渐变

1
p + scale_colour_gradient(low="black",high="white")

mark

渐变色中用白色划分

1
2
3
4
library(scales)
## Warning: package 'scales' was built under R version 3.4.1
p + scale_colour_gradient2(low=muted("red"),mid="white",high=muted("blue"),midpoint=110)
# muted()表示降低标准颜色

mark

n个颜色的渐变色

1
p + scale_colour_gradientn(colours=c("darkred","orange","yellow","white"))

mark

根据数值设定阴影颜色

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
library(gcookbook)
cb <- subset(climate,Source == "Berkeley") # 提取climate数据集中的Source为Berkeley的数据,将这些数据复制到cb中
cb$valence[cb$Anomaly10y >= 0] <- "pos" # 将Anomaly10y大于等于0的数据的valence改为pos
cb$valence[cb$Anomaly10y < 0] <- "neg" # 将Anomaly10y小于0的数据的valence改为neg
head(cb)
## Source Year Anomaly1y Anomaly5y Anomaly10y Unc10y valence
## 1 Berkeley 1800 NA NA -0.435 0.505 neg
## 2 Berkeley 1801 NA NA -0.453 0.493 neg
## 3 Berkeley 1802 NA NA -0.460 0.486 neg
## 4 Berkeley 1803 NA NA -0.493 0.489 neg
## 5 Berkeley 1804 NA NA -0.536 0.483 neg
## 6 Berkeley 1805 NA NA -0.541 0.475 neg
ggplot(cb,aes(x=Year,y=Anomaly10y))+
geom_area(aes(fill=valence))+
geom_line()+
geom_hline(yintercept=0) # 加入一条水平线,水平线的截距为0

mark

从上图的绘图区域可以看出,在数据波动比较小的地方有重合,数据点并不在0上,可以用approx()将数据插值到1000个点左右,如下所示:

1
2
3
4
5
6
7
8
9
10
interp <- approx(cb$Year,cb$Anomaly10y,n=1000)
cbi <- data.frame(Year=interp$x,Anomaly10y=interp$y)
cbi$valence[cbi$Anomaly10y >=0] <- "pos"
cbi$valence[cbi$Anomaly10y < 0] <- "neg"
ggplot(cbi,aes(x=Year,y=Anomaly10y)) +
geom_area(aes(fill=valence),alpha=0.4)+
geom_line()+
scale_fill_manual(values=c("#CCEEFF","#FFDDDD"),guide=FALSE) +
scale_x_continuous(expand=c(0,0))

mark

参考资料

  1. 常肖楠, 邓一硕, 魏太云. R数据可视化手册[M]. 人民邮电出版社, 2014.